package com.qcby.dao;

import com.qcby.entity.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface MomentsDao {

    //通过用户id获取用户信息
    User showUserInfoByUserId(int userId);

    //分页查询朋友圈用户的打卡
    List<UserCheckin> showAllCheckinsByPage(int pageSize);

    //在分页展示数据之前查询单个朋友圈打卡评论数量
    int findSingleMomentCommentNum(@Param("momentId") int momentId);

    //在分页展示数据之前更新单个朋友圈打卡评论数量
    void updateSingleMomentCommentNum(@Param("momentId") int momentId,
                                      @Param("reviewNum") int reviewNum);

    //分页展示数据之前查询单个朋友圈打卡点赞数量
    int findSingleMomentLikeNum(@Param("momentId") int momentId);

    //分页展示数据之前更新单个朋友圈打卡点赞数量
    void updateSingleMomentLikeNum(@Param("momentId") int momentId,
                                      @Param("likeNum") int likeNum);

    //通过打卡记录id获取打卡记录下的评论
    List<Review> getCommentsByCheckinId(int checkinId);

    //查询当前单个评论的点赞数量
    int findSingleReviewLikeNum(@Param("reviewId") int reviewId);

    //更新当前单个评论的点赞数量
    void updateSingleReviewLikeNum(@Param("reviewId") int reviewId,
                                   @Param("likeNum") int likeNum);

    //通过父评论id获取子评论
    List<Review> getChildrenCommentsByParentId(int parentId);

    //对打卡记录添加评论
    int addComment(@Param("checkinId") int checkinId,
                   @Param("userId") int userId,
                   @Param("content") String content);

    //查找当前单个评论的评论数量
    int findCheckinReviewCount(@Param("checkinId") int checkinId);

    //在进行评论的同时更新评论数
    void updateCommentsCount(@Param("singleReviewCount") int singleReviewCount,
                             @Param("checkinId") int checkinId);

    //对评论进行回复
    void replyComment(@Param("checkinId") int checkinId,
                      @Param("userId") int userId,
                      @Param("content") String content,
                      @Param("parentId") int parentId);

    //通过店铺名称模糊查询到店铺信息
    List<Shop> fuzzyQueryShop(@Param("shopName") String shopName);

    //发布朋友圈打卡
    int publishMoment(@Param("context") String context,
                      @Param("imgsUrls") String imgsUrls,
                      @Param("userId") int userId,
                      @Param("shopId") int shopId);

}
